package com.heima.leetcode.datastructure.heap;

/**
 * <strong>查找数据流中第k大的元素 703</strong>
 * <p>数据流就是一个会变化的数组，后面会有不断的数据加入到数组中</p>
 * <p>假定数据流中最少有k个元素</p>
 * @author 勾新杰
 * @version 1.0
 * @date 2024/9/6 18:01
 */
public class KthLargest {
    private final MinHeap heap;

    /**
     * 构造方法初始化堆
     * @param arr 数据流的初始大小
     * @param k 第k大
     */
    public KthLargest(int[] arr, int k) {
        heap = new MinHeap(k);
        for (int i : arr) {
            add(i);
        }
    }

    /**
     * 数据流中加入一个元素并返回加入后第k大的元素
     * @param val 加入的元素
     * @return 第k大的元素
     */
    public int add(int val){
        if (!heap.isFull()){
            heap.offer(val);
        }else if (val > heap.peek()){
            heap.replace(val);
        }
        return heap.peek();
    }
}
